#include "EstadoDeDeclaracion.h"
#include "MensajeDeSolicitudDeTirarDados.h"
#include "EstadoDeRefuerzoYReubicacion.h"

EstadoDeDeclaracion::EstadoDeDeclaracion(EstadoDeAtaque* estadoDeAtaque)
{
	this->estadoDeAtaque = estadoDeAtaque;
}

void EstadoDeDeclaracion::realizarAtaque(Ataque* ataque) {
	JuegoServerImp* juego = this->estadoDeAtaque->getEstadoDeRealizacionDePartida()->getJuego();
	ValidadorDeAtaques validadorDeAtaques;
	validadorDeAtaques.validarAtaque(ataque,juego->getMapa());
	this->estadoDeAtaque->setAtaque(ataque);
	MensajeDeSolicitudDeTirarDados mensaje(*ataque);
	juego->getServer()->enviarMensaje(ataque->getJugadorAtacante(),mensaje);
	this->estadoDeAtaque->setEstado(this->estadoDeAtaque->getEstadoDeTiradaDeDados());
}

void EstadoDeDeclaracion::moverEjercitos(Jugador* jugador, Territorio* origen, Territorio* destino, unsigned int cantidadDeEjercitos) {
	this->estadoDeAtaque->getEstadoDeRealizacionDePartida()->
		setEstado(this->estadoDeAtaque->getEstadoDeRealizacionDePartida()->getEstadoDeFortificacionDeUnidades());
	this->estadoDeAtaque->getEstadoDeRealizacionDePartida()->moverEjercitos(jugador,origen,destino,cantidadDeEjercitos);
}

void EstadoDeDeclaracion::pasar(Jugador* jugador) {
	this->estadoDeAtaque->getEstadoDeRealizacionDePartida()->getJuego()->pasarAlSiguienteTurno();
	this->estadoDeAtaque->getEstadoDeRealizacionDePartida()->
		setEstado(this->estadoDeAtaque->getEstadoDeRealizacionDePartida()->getEstadoDeRefuerzoYReubicacion());
	((EstadoDeRefuerzoYReubicacion*)this->estadoDeAtaque->getEstadoDeRealizacionDePartida()->
			getEstadoDeRefuerzoYReubicacion())->reforzarEjercitos(this->estadoDeAtaque->getEstadoDeRealizacionDePartida()->
					getJuego()->getJugadorEnTurno());
}

EstadoDeDeclaracion::~EstadoDeDeclaracion()
{
}
